(function(mod) {
    if (typeof exports == "object" && typeof module == "object") // CommonJS
      mod(require("/assets/static/javascript/lucidity.note.app.v1.0.0.js"));
    else if (typeof define == "function" && define.amd) // AMD
      define(["/assets/static/javascript/lucidity.note.app.v1.0.0.js"], mod);
    else // Plain browser env
      mod(LucidityNoteApp);
}) (function(LucidityNoteApp) {
    "use strict";

    LucidityNoteApp.Helper = {}

    LucidityNoteApp.Helper.net = {
        // 1. GET（SELECT）：从服务器取出资源（一项或多项）；
        // 2. POST（CREATE）：在服务器新建一个资源；
        // 3. PUT（UPDATE）：在服务器更新资源（客户端提供改变后的完整资源）；
        // 4. PATCH（UPDATE）：在服务器更新资源（客户端提供改变的属性）；
        // 5. DELETE（DELETE）：从服务器删除资源；
        // 6. HEAD：获取资源的元数据；
        // 7. OPTIONS：获取信息，关于资源的哪些属性是客户端可以改变的。
        /**
         * axios get 网络请求
         * @param {String} path 请求路径
         * @param {Object} params 请求参数
         * @param {Function} success 请求成功执行的函数
         * @param {Function} failure 请求失败执行的函数
         * @param {Function} after 不管成功还是失败都会执行的函数
         */
        get: (path, params = {}, success=(data)=>{}, failure=(err)=>{}, after=()=>{}) => {
            axios.get(path, params)
                .then(function(response) {success(response.data)})
                .catch(function(error) {failure(error.response.data)})
                .then(function() {after()});  
        },

        /**
         * axios get 网络请求
         * @param {String} path 请求路径
         * @param {Object} params 请求参数
         * @param {Function} success 请求成功执行的函数
         * @param {Function} failure 请求失败执行的函数
         * @param {Function} after 不管成功还是失败都会执行的函数
         */
        post: (path, params = {}, success=(data)=>{}, failure=(err)=>{}, after=()=>{}) => {
            axios.post(path, params)
                .then(function(response) {success(response.data)})
                .catch(function(error) {failure(error.response.data)})
                .then(function() {after()});  
        },

        /**
         * axios get 网络请求
         * @param {String} path 请求路径
         * @param {Object} params 请求参数
         * @param {Function} success 请求成功执行的函数
         * @param {Function} failure 请求失败执行的函数
         * @param {Function} after 不管成功还是失败都会执行的函数
         */
        put: (path, params = {}, success=(data)=>{}, failure=(err)=>{}, after=()=>{}) => {
            axios.put(path, params)
                .then(function(response) {success(response.data)})
                .catch(function(error) {failure(error.response.data)})
                .then(function() {after()});  
        },

        /**
         * axios delete 网络请求
         * @param {String} path 请求路径
         * @param {Object} params 请求参数
         * @param {Function} success 请求成功执行的函数
         * @param {Function} failure 请求失败执行的函数
         * @param {Function} after 不管成功还是失败都会执行的函数
         */
        delete: (path, params = {}, success=(data)=>{}, failure=(err)=>{}, after=()=>{}) => {
            axios.delete(path, params)
                .then(function(response) {success(response.data)})
                .catch(function(error) {failure(error.response.data)})
                .then(function() {after()});  
        },
    }

    /**
     * 获取唯一序列号（来源于百度）
     * @param {int} len 长度
     * @param {int} radix 序列符号基准个数
     * @returns 
     */
    LucidityNoteApp.Helper.uuid = (len, radix) => {
        var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
        var uuid = [], i;
        radix = radix || chars.length;
        if (len) {
            for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
        } else {
            var r;
            uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
            uuid[14] = '4';
            for (i = 0; i < 36; i++) {
                if (!uuid[i]) {
                    r = 0 | Math.random() * 16;
                    uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
                }
            }
        }
        return uuid.join('');
    },

    /**
     * 将对象序列化成 json 串
     * @param {Object} obj 
     * @returns json 串
     */
    LucidityNoteApp.Helper.serialize = (obj) => {
        return JSON.stringify(obj)
    }

    /**
     * 将 json 串转换成 json 对象
     * @param {string} data 
     * @returns 
     */
    LucidityNoteApp.Helper.deserialize = (jsonStr) => {
        return JSON.parse(jsonStr);
    },

    /**
     * 实现 json 对象的拷贝
     * @param {Object} obj 
     * @returns 
     */
    LucidityNoteApp.Helper.clone = (obj) => {
        var jsonStr = LucidityNoteApp.Helper.serialize(obj);
        return LucidityNoteApp.Helper.deserialize(jsonStr)
    }
});